/**
 * Copyright ©2003~2019年2月14日 szkingdom
 * @author raohj
 * @date 2019年2月14日
 * @file RTestLoader.java
 * @comment : please input your comment to this file
 * @version : input version
 * @modify:
 * 		1、 2019年2月14日 由 raohj 新建文件
 */
package com.ccnu.demojava.jvm.loader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;

/**
 * @author raohj
 * @date 2019年2月14日
 * @version 
 * @comment to add your comment
 */
public class RTestLoader {
	private static final Logger log = LoggerFactory.getLogger(RTestLoader.class);
	public static void test() {
//		testLoadOrder();
		testLoaderTools();
	}
	
	public static void testLoadOrder() {
		ClassLoader cl = ClassLoader.getSystemClassLoader();

		log.info("测试调用final静态成员");
		String classN = RLoaderBean.CLASS_NAME;
		
//		log.info("测试调用静态成员");
//		RLoaderBean.age = 2;
//		
//		log.info("测试调用静态函数");
//		RLoaderBean.test();
		
		log.info("测试loadClass加载RLoaderBean");
		try {
			cl.loadClass("com.ccnu.demojava.jvm.loader.RLoaderBean");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		log.info("测试class.forname加载RLoaderBean");
		try {
			Class.forName("com.ccnu.demojava.jvm.loader.RLoaderBean");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void testLoaderTools() {
		ClassLoader clPlatform = ClassLoader.getSystemClassLoader();
		log.info("平台类加载器" + clPlatform);
		
		ClassLoader clSystem = ClassLoader.getSystemClassLoader();
		log.info("系统类加载器" + clSystem);
		try {
			Enumeration<URL> urls = clSystem.getResources("");
			while(urls.hasMoreElements()) {
				log.info("系统类加载器资源根路径[" + urls.nextElement().toString() + "]");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		ClassLoader clExtend = clSystem.getParent();
		log.info("扩展类加载器" + clExtend);
		try {
			Enumeration<URL> urls = clExtend.getResources("");
			while(urls.hasMoreElements()) {
				log.info("扩展类加载器资源路径[" + urls.nextElement().toString() + "]");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		log.info("扩展类加载器资源路径[" + System.getProperty("java.ext.dirs") + "]");
		
		ClassLoader clRoot = clExtend.getParent();
		log.info("跟类加载器" + clRoot);
	}
}
